import { loginAPI } from '@/api/user'
import { setToken, getToken, removeToken } from '@/utils/auth'
export default {
  namespaced: true,
  // 模块内的state，官网推荐写成函数形式，但写成对象也行
  state: {
    token: getToken() || '' // 只有刷新页面的时候会去磁盘读token，大多数时候还是用的vuex存储的数据，所以基本上仍能享受到vuex存储数据的快捷性
  },
  mutations: {
    setToken (state, val) {
      state.token = val
      setToken(val) // js-cookie基于磁盘，利用js-cookie本地化持久存储
      // 上一行的setToken()使用的是导入的方法，而不是mutations里同名的方法，因为mutations里的方法只有一种调用方式，就是store.commit('方法名')
    },
    removeToken (state) {
      // 清空vuex中的token
      state.token = ''
      // 清空cookie中的token
      removeToken()
    }
  },
  actions: {
    // vuex官网建议在actions里调接口
    // 被async和await修饰，得到的是个Promise
    // async和await对内是同步，对外是异步
    async tokenSet (store, val) {
      const res = await loginAPI(val)
      // console.log(res)
      store.commit('setToken', res.data.token)
    }
  }
}
